package com.nanbei.sort;

import java.util.Arrays;

/**
 * @ClassDescription: 插入排序
 * @JdkVersion: 17
 * @Author: BaoShan.Li
 * @Date: 2024/6/25 22:05
 */
public class InsertionSort {

    /**
     * - 将数组分为两部分* *[0 .. low-1]  [low .. a.length-1]*
     *   - *左边* *[0 .. low-1]* *是已排序部分*
     *   - *右边* *[low .. a.length-1]* *是未排序部分*
     * - *每次从未排序区域取出* *low* *位置的元素*, *插入到已排序区域*
     * @param nums 待排序数组
     * @return 已排序的数组
     */
    public static int[] insertion(int[] nums){
        int length = nums.length;
        for (int low = 1; low < length ; low++) {
            int temp = nums[low];
            int i = low-1;
            // 未找到插入位置，将较大的元素依次向后插入一位
            while ( i >= 0 && temp < nums[i]){
                nums[i+1] = nums[i--];
            }
            // 找到插入位置
            if (i != low-1){
                nums[i+1] = temp;
            }
        }
        return nums;
    }


    public static void main(String[] args) {
        int[] insertion = insertion(new int[]{10,3,6,4,7,5,9,8,1,2});
        System.out.println(Arrays.toString(insertion));
    }
}
